package com.acme.javaschool.intense.sems.sem2concurrency.pool;

import com.acme.javaschool.intense.sems.sem2concurrency.pool.data.PoolableObject;

public interface Pool<T> {
    PoolableObject<T> get() throws InterruptedException;
    PoolableObject<T> tryGet() throws InterruptedException;
    PoolableObject<T> tryGet(long timeoutMillis) throws InterruptedException;

    void release(PoolableObject<T> obj) throws InterruptedException;

    public int getAvailableItemsCount();
    public int getBound();
    int getMaxBound();

    TestHelper getTestHelper();
}
